package com.dubbo.redis;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ShardedJedis;

public class JedisDao {

	private final static Logger log = LoggerFactory.getLogger(JedisDao.class);
	private static TleJedisPool pool;

	// 获取redis中key的集合
	public long getDbSize() {
		long size = 0;
		ShardedJedis jedis=null;
		try {
			// 从jedis池中获取一个jedis实例
			jedis = pool.getReadPoolInstance().getResource();
			// 获取redis中有多少个key
			size = jedis.getShard("*").dbSize();
		} catch (Exception ex) {
			log.error("getDbSize{}",ex.getMessage());
		} finally {
			// 释放对象池，即获取jedis实例使用后要将对象还回去
			if(null !=jedis){
				pool.getReadPoolInstance().returnResource(jedis);
			}
		}
		return size;
	}

	// 写入key-vlaue
	public void set(String key, String value) {
		Jedis jedis = null;
		try {
			// 从jedis池中获取一个jedis实例
			jedis = pool.getWreitePoolInstance().getResource();
			// 获取jedis实例后可以对redis服务进行一系列的操作
			if (pool.life > 0) {
				jedis.setex(key, pool.life, value);
			} else {
				jedis.set(key, value);
			}
			// 释放对象池，即获取jedis实例使用后要将对象还回去
		} catch (Exception ex) {
			log.error("set{}", ex.getMessage());
		} finally {
			// 释放对象池，即获取jedis实例使用后要将对象还回去
			if(null !=jedis){
				pool.getWreitePoolInstance().returnResource(jedis);
			}
		}


	}

	/**
	 * 根据key获取vlaue
 	 * @param key
	 * @return String
	 */
	public String get(String key) {

		String value = null;
		ShardedJedis jedis = null;
		try {
			// 从jedis池中获取一个jedis实例
			jedis = pool.getReadPoolInstance().getResource();
			// 获取jedis实例后可以对redis服务进行一系列的操作
			value = jedis.get(key);
		} catch (Exception ex) {
			log.error("get{}", ex.getMessage());
		} finally {
			if(null != jedis){
				// 释放对象池，即获取jedis实例使用后要将对象还回去
				pool.getReadPoolInstance().returnResource(jedis);
			}
		}
		return value;

	}

	// 删除key-vlaue
	public void del(String key) {
		Jedis jedis = null;
		try {
			// 从jedis池中获取一个jedis实例
			jedis = pool.getWreitePoolInstance().getResource();
			// 获取jedis实例后可以对redis服务进行一系列的操作
			jedis.del(key);
		} catch (Exception ex) {
			log.error("del{}", ex.getMessage());
		}finally {
			// 释放对象池，即获取jedis实例使用后要将对象还回去
			if(null !=jedis){
				pool.getWreitePoolInstance().returnResource(jedis);
			}

		}
	}

}
